/*******************************************************************************
版权声明: Copyright(C) HT-Tech Co., Ltd. 2020-2021. All rights reserved.
文件名称: htauth.c
文件描述: 终端认证
创 建 者: 陈位仅
创建时间: 2024年11月14日
修改历史:
1. 2024年11月14日   陈位仅      创建文件 
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

#include "htmacro.h"
#include "htcfg.h"
#include "htssl.h"
#include "htprotocol.h"
#include "htauth.h"

//  终端认证,ACL 获取,虚拟网卡配置,系统路由配置
int htauth_process(IN ht_cfg_t *pCfg, IN htssl_info_t *pInfo)
{
    int rv = 0;
    int rBytes = 0;
    int sBytes = 0;
    char buffer[BUFFER_SIZE] = {0};    // 发送缓冲区

    // 终端认证请求包
    rv = htprc_request(pCfg, buffer, &sBytes);
    if (rv < 0) {
        return -1;
    }

    // 发送数据
    if (SSL_write(pInfo->ssl, buffer, sBytes) <= 0) {
        ERR_print_errors_fp(stderr);
        return -1;
    }

    // 接收认证响应包
    rBytes = SSL_read(pInfo->ssl, buffer, BUFFER_SIZE);
    if (rBytes <= 0) {
        ERR_print_errors_fp(stderr);
        return -1;
    }

    // 解析认证响应包
    rv = htprc_respone(buffer, rBytes);
    if (rv < 0) {
        return -1;
    }

    // 接收配置推送包
    rBytes = SSL_read(pInfo->ssl, buffer, BUFFER_SIZE);
    if (rBytes <= 0) {
        ERR_print_errors_fp(stderr);
        return -1;
    }

    // 解析配置包
    rv = htprc_config(pCfg, buffer, rBytes);
    if (rv < 0) {
        return -1;
    }

    return 0;
}
